package main

import (
	"fmt"
	"sync"
	"time"
)

//
var wg sync.WaitGroup

// 写数据
func fn1(ch chan<- int){
	for i:=1;i<=10;i++{
		ch <-i 
		fmt.Printf("[写入]数据%v成功\n",i)
		time.Sleep(time.Millisecond*50)
	}
	// 写入关闭管道
	close(ch)
	wg.Done()
}
// 读取管道里面的数据
func fn2(ch <-chan int){
	for v:=range ch{
		fmt.Printf("读取数据%v成功\n",v)
	}
	wg.Done()
}
func main() {
	var ch =make(chan int,10)
	wg.Add(1)
	go fn1(ch)
	wg.Add(1)
	go fn2(ch)
	// 主线程等待协程
	wg.Wait()
	fmt.Println("主线程关闭")
	// // 在默认情况下 管道是双向
	// ch1 := make(chan int, 2)
	// ch1 <- 10
	// ch1 <- 12
	// m1 := <-ch1
	// m2 := <-ch1
	// fmt.Println(m1,m2)
	// // 管道声明只为写
	// ch2 :=make(chan<- int,2)
	// ch2 <- 10
	// ch2 <- 12
	// // <- ch2  无法读取管道的数据
	
	// // 管道声明只读
	// ch3 :=make(<-chan int,2)
	// // ch3 <- 23 无法写入

}